Skip to content

['1','2','3'].map(parseInt) 的返回值是什么?

参考答案:

首先整个题目考校的是两个函数,和一个字符串转数字的概念

  1. 数组的map函数,接受三个参数,当前值,当前索引,当前数组。
  2. parseInt接受两个参数,需要转换的字符串,基数(基数取值范围2~36)
js
var new_array = arr.map(function callback(currentValue, index, array) {  
 // Return element for new_array  
})  
parseInt(string, radix)
  1. 根据上面的两个函数的解释,我们可以发现实际上,上面的['1','2','3'].map(parseInt) 其实就是等价于下面的代码。
js
['1','2','3'].map((item, index) => {  
    return parseInt(item, index)  
})  
//  parseInt('1', 0)  1  
//  parseInt('2', 1)  NaN  
//  parseInt('3', 2)  NaN
  1. 如果我们需要返回1,2,3需要怎么办?
js
function parseIntFun(item) {  
    return parseInt(item, 10)  
}  
['1','2','3'].map(parseIntFun)  
//  parseInt('1', 10)  1  
//  parseInt('2', 10)  2  
//  parseInt('3', 10)  3

综上所述,返回值是 [1,NaN,NaN]

题目要点:

['1','2','3'].map(parseInt) 的返回值是 [1, NaN, NaN],因为 map 方法调用 parseInt 时,不仅传递了数组中的字符串,还传递了索引作为 parseInt 的第二个参数(基数),导致 '2''3' 无法以非法的基数解析,从而返回 NaN

正确的做法是使用箭头函数明确指定基数,如 ['1', '2', '3'].map(str => parseInt(str, 10)),或者使用 Number 函数代替 parseInt,即 ['1', '2', '3'].map(Number)